<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 数组扁平化  => 将多维数组拉平为一维数组
    // var list = [1,2,3,[4,5,6,[7,8,9]]];  
    
    // [1,2,3,4,5,6,7,8,9];

    // 1. 先转字符串,在用","分割
    // var str = list.toString();
    // console.log(str);

    // var arr = list.toString().split(",");
    // console.log(arr);


    // 2. 递归写法
    // function flat(list){ // [1,2,3,[4,5,6]]   [4,5,6]
    //     var arr = [];  // [1 2 3] 
    //     for(var i=0;i<list.length;i++){
    //         var item = list[i]; // 1,2,3,[4,5,6]
    //         if(Array.isArray(item)){
    //             var newArr = flat(item);  // flat([4,5,6]) 将数组重新拷贝一份  
    //             // arr.push(newArr);   // 将拷贝的数组直接放到新数组中  => 数组的深复制
    //             arr = arr.concat(newArr); //  将拷贝的数组拼接到到新数组中
    //         }else{
    //             arr.push(item);
    //         }
    //     }
    //     return arr;
    // }
    // var list = [1,2,3,[4,5,6,[7,8,9]]]; 
    // console.log(flat(list));


    // 3. flat 数组的拉平  用于将嵌套的数组“拉平”，变成一维的数组。该方法返回一个新数组，对原数据没有影响
    // flat()默认只会“拉平”一层，如果想要“拉平”多层的嵌套数组，可以将flat()方法的参数写成一个整数，表示想要拉平的层数，默认为1。

    // var list = [1,2,3,[4,5,6,[7,8,9]]]; 

    // var res = list.flat(); // 默认只拉平一层
    // console.log(res);

    // var res = list.flat(2);
    // console.log(res);

    // 如果不管有多少层嵌套，都要转成一维数组，可以用Infinity关键字作为参数。
    var list = [1,2,[3,[4,[5,[6,[7,[8],[9,[10,[11]]]]]]]]]; 

    var res = list.flat(Infinity);
    console.log(res);

    






</script>
</html>